

'''
1 访问首页，拿到html源码。
2 从源码中，使用正则，或者bs4包的方式，找到所有的链接对应的网址。
3 把网址需要进行整理（网址有很多不规范的地方，需要整理）
4 所有有效的网址的网址存到一个列表
5 遍历列表中所有的网址，获取他们的Html源码
6 如果想爬特定内容，可以设定一个或者多个关键字，判断在当前源码中在不在，
  如果没有我们想要的内容，则不保存源码，如果存在我们把当前的源码保存下来。
7 所有保存源码的内容，你可以继续提取你想要的数据。
8 兼容selenium框架访问页面。

使用requests的方式，直接从网络层下载网页源码的方式：

'''


import re
import requests
from bs4 import BeautifulSoup
import os

def get(url):
    headers= {}
    try:
        r=requests.get(url,timeout=5,headers=headers)
        r.encoding='utf-8'
        return r.text
    except Exception as e:
        print(url+'\n'+str(e))
        return ''
    #pass
def get_2(url):
    from selenium import webdriver
    try:
        driver= webdriver.Chrome(executable_path='D:\\test\\test\\chromedriver.exe')
        driver.get(url)
        html=driver.page_source
    except Exception as e:
        print(e)
        return ''

def get_all_links(html):
    soup=BeautifulSoup(html,'html.parser')
    #print(len(soup.find_all('a')))
    links= []
    for link in soup.find_all('a'):
        #print(0,dir(link))
        #print(0,link.attrs)
        #print(0,type(link.attrs))
        #print(0,link.attrs.keys())
        if 'href' in link.attrs.keys():#标签属性生成一个字典
            links.append(link.attrs['href'])
            #print(1,link)
            #print(2,link.attrs['href'])
    return links

def get_valid_links(links):
    valid_links= []
    for link in links:
        if 'javascript' in link:
            continue
        elif link.startswith('mailto'):
            continue
        elif link.endswith('.pdf') or link.endswith('.jpeg') or link.endswith('.jpg'):
            continue
        elif link.startswith('//'):
            link= 'https:'+link
        elif link.startswith('/'):
            link= 'https://www.sohu.com'+link
        valid_links.append(link)
        print(1,link)
    return valid_links

def get_keyword_page(key_word):
    global valid_links
    for link in valid_links:
        page_html= get(link)
        if re.search(key_word,page_html):
            save_page_html('D:\\test\\test',page_html)
def save_page_html(save_path,html):
    if not os.path.exists(save_path):
        print('目录不存在：%s' %save_path)
        return None
    import time
    file_name= str(int(time.time()))[-7:]+'.html'
    file_name= os.path.join(save_path,file_name)
    with open(file_name,'w',encoding='utf-8') as fp:
        fp.write(html)
        get_page_content(file_name)
    print('文件生成成功：%s' %file_name)
    #pass

def get_page_content(html_file_path):
    if not os.path.exists(html_file_path):
        print('网页源码文件的路径不存在：%s' %html_file_path)
        return None
    with open(html_file_path,encoding='utf-8') as fp:
        html=fp.read()
    soup= BeautifulSoup(html,'html.parser')
    print(soup.h1)
    #print(1,list(soup.h1.stripped_strings))
    #print(1,list(soup.h1.strings))
    print(1,soup.h1)
    if not soup.h1:return None
    if len(list(soup.h1.stripped_strings))==0:return None
    title= list(soup.h1.stripped_strings)[0]
    print(title)
    ps= soup.find_all('p')
    content=''
    for p in ps:
        for s in p.stripped_strings:
            if len(s)>=10:
                content+=s+'\n'
    print(content)
    html_file_path=html_file_path.replace('.html','.txt')
    with open(html_file_path,'a',encoding='utf-8') as fp:
        fp.write(title+'\n\n')
        fp.write(content)
    print('内容文件生成成功：%s' %html_file_path)

#path= 'd:\\test\\test\\1.html'
#get_page_content(path)



source_code_url= get('https://news.sohu.com/')
links= get_all_links(source_code_url)
#print(links)
valid_links= get_valid_links(links)
#print(1,valid_links)

get_keyword_page('股市|娱乐|体育')
